package pe.gob.foncodes.ssa.web.controller;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;

import pe.gob.foncodes.ssa.bs.common.controller.GenericController;
import pe.gob.foncodes.ssa.bs.common.util.Constante;
import pe.gob.foncodes.ssa.bs.common.util.ServiceException;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Conexion;
import pe.gob.foncodes.ssa.bs.seguridad.domain.General;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Perfil;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Usuario;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Zonal;
import pe.gob.foncodes.ssa.web.beans.ConexionPorUsuarioBean;
import pe.gob.foncodes.ssa.web.beans.UsuarioBean;
import pe.gob.foncodes.ssa.web.util.Impresion;

public class ReporteConexionesPorUsuariosController extends GenericController {
    protected static Logger log = Logger.getLogger(ReporteConexionesPorUsuariosController.class);
    
    private String busCodUsuario;
    private String busNomUsuario;
    private Long busPerfil;
    private Long busConexion;
    
    private List<Perfil> lstPerfil;    
    private List<Conexion> lstConexion;
    private List<ConexionPorUsuarioBean> lstConexiones;
    
    @Override
    public void init(){
        lstConexiones = new ArrayList<ConexionPorUsuarioBean>();
    }

    @Override
    public void search(ActionEvent event) throws Exception{
        log.info("Ejecutando filtro reporte");
        log.info(String.format("{0}{1}","busCodUsuario:", busCodUsuario));
        log.info(String.format("{0}{1}","busNomUsuario:", busNomUsuario));
        
        this.busCodUsuario=(this.busCodUsuario == null)?null:this.busCodUsuario.trim().toUpperCase();
        this.busNomUsuario=(this.busNomUsuario == null)?null:this.busNomUsuario.trim().toUpperCase();
        
        String strNomUsuario = (this.busNomUsuario == null)?null:this.busNomUsuario + "%";
                

        List<Object[]> olstConexiones = getService().findByNamedQuery("Conexion.findByReporte",
                                                                                new Object[]{this.busCodUsuario
                                                                                           , strNomUsuario
                                                                                           , this.busPerfil
                                                                                           , this.busConexion});
        this.lstConexiones = new ArrayList<ConexionPorUsuarioBean>();
        for(Object[] obj: olstConexiones){
            ConexionPorUsuarioBean oConexion = new ConexionPorUsuarioBean();
            oConexion.setCOD_USUARIO((String)obj[0]);
            oConexion.setNOMBRES((String)obj[1]);
            oConexion.setTXT_MODULO((String)obj[2]);
            oConexion.setTXT_PERFIL((String)obj[3]);
            oConexion.setTXT_CONEXION((String)obj[4]);
            oConexion.setTIPO_USUARIO((String)obj[5]);
            this.lstConexiones.add(oConexion);
        }        
    }
    
    public void limpiar(){
        this.busCodUsuario="";
        this.busNomUsuario="";
        
        this.lstConexiones = new ArrayList<ConexionPorUsuarioBean>();        
    }
    
    public void print() {
        try {
            Collection col = new ArrayList();
            for (ConexionPorUsuarioBean oConexion : this.lstConexiones) {
                col.add(oConexion);
            }
            Impresion imprimir = new Impresion();
            imprimir.imprimirListado("ssa_rpt_conexiones_x_usuario", col);
        } catch (Exception ex) {
            log.error(ex);
        } finally {
            FacesContext.getCurrentInstance().responseComplete();
        }
    }
    
//    
//    @Override
//    public boolean validate() throws Exception{
//        boolean success = true;
//        
//        return success;
//    }

    public String getBusCodUsuario() {
        return busCodUsuario;
    }

    public void setBusCodUsuario(String busCodUsuario) {
        this.busCodUsuario = busCodUsuario;
    }

    public String getBusNomUsuario() {
        return busNomUsuario;
    }

    public void setBusNomUsuario(String busNomUsuario) {
        this.busNomUsuario = busNomUsuario;
    }

    public List<Conexion> getLstConexion() throws ServiceException {
        this.lstConexion = getService().findByNamedQuery("Conexion.findAll");
        return lstConexion;
    }

    public void setLstConexion(List<Conexion> lstConexion) {
        this.lstConexion = lstConexion;
    }

    public List<Perfil> getLstPerfil() throws ServiceException {
        this.lstPerfil = getService().findByNamedQuery("Perfil.findByFlgActivo",new Object[]{Constante.ESTADO_ACTIVO});
        return lstPerfil;
    }

    public void setLstPerfil(List<Perfil> lstPerfil) {
        this.lstPerfil = lstPerfil;
    }

    public Long getBusConexion() {
        return busConexion;
    }

    public void setBusConexion(Long busConexion) {
        this.busConexion = busConexion;
    }

    public Long getBusPerfil() {
        return busPerfil;
    }

    public void setBusPerfil(Long busPerfil) {
        this.busPerfil = busPerfil;
    }

    public List<ConexionPorUsuarioBean> getLstConexiones() {
        return lstConexiones;
    }

    public void setLstConexiones(List<ConexionPorUsuarioBean> lstConexiones) {
        this.lstConexiones = lstConexiones;
    }    
}
